package unit

import (
	"bytes"
	"encoding/binary"
)

/**
 * IntToBytes，int类型转换为byte字节切片
 * Params：
 *   i：int类型值
 * Return：
 *   byte字节切片
 */
func IntToBytes(i int) ([]byte, error) {
	x := int32(i)

	bytesBuffer := bytes.NewBuffer([]byte{})
	if err := binary.Write(bytesBuffer, binary.BigEndian, x); err != nil {
		return nil, err
	}

	return bytesBuffer.Bytes(), nil
}

/**
 * BytesToInt，byte字节切片转为int类型
 * Params：
 *   b：byte字节切片
 * Return：
 *   int类型结果值
 */
func BytesToInt(b []byte) (int, error) {
	bytesBuffer := bytes.NewBuffer(b)

	var x int32
	if err := binary.Read(bytesBuffer, binary.BigEndian, &x); err != nil {
		return 0, err
	}

	return int(x), nil
}

/**
 * Int64ToBytes，int64类型转换为byte字节切片
 * Params：
 *   i：int64 值
 * Return：
 *   byte字节切片
 */
func Int64ToBytes(i int64) []byte {
	var buf = make([]byte, 8)
	binary.BigEndian.PutUint64(buf, uint64(i))
	return buf
}

/**
 * BytesToInt，byte字节切片转为int64类型
 * Params：
 *   b：byte字节切片
 * Return：
 *   int64类型结果值
 */
func BytesToInt64(b []byte) int64 {
	return int64(binary.BigEndian.Uint64(b))
}
